''' leetcode1839所有元音按顺序排布的最长子字符串

描述： 当一个字符串满足如下条件时，我们称它是美丽的：
1.所有5个英文元音字母（‘a’,‘e’,‘i’,‘o’,‘u’）都必须至少出现一次
2.这些元音字母的顺序都必须按照字典序升序排布
比方说，字符串"aeiou"和"aaaaaaeiiiioou"都是美丽的，而"uaeio",“aeoiu"等不是美丽的
给你一个只包含英文元音字母的字符串word，请你返回word中最长美丽子字符串的长度。如果不存在返回0
子字符串： 是字符串中一个连续的字符串序列

示例1:
输入：word = “aeiaaioaaaaeiiiiouuuooaauuaeiu”
输出：13
解释：最长子字符串是"aaaaeiiiiouuu”,长度为13
示例2：
输入：word = “aeeeiiiioooauuuaeiou”
输出：5
解释：最长子字符串是 “aeiou” ，长度为 5 。
示例 3：
输入：word = “a”
输出：0
解释：没有美丽子字符串，所以返回 0
'''

# 动态规划法
class Solution:
    def longestBeautifulSubstring(self, word: str) -> int:
        n = len(word)
        dp = [0] * n # 记录遇到a到遇见u之前的字符数量
        ans = 0
        if word[0] == 'a':
            dp[0] = 1
        for i in range(1, n):
            # print(dp)
            if word[i] == 'a':
                dp[i] = 1 # 遇见a开始计数
            '''
            ① dp[i - 1] != 0 表示已经遇到a了，
            ② word[i] == word[i - 1] 当前字符遇上一个字符相同，
            ③ (word[i - 1], word[i]) in (('a', 'e'), ('e', 'i'), ('i', 'o'), ('o', 'u')))
               表示当前字符遇上一个不一样，但是符合后面的形式
            '''
            if dp[i - 1] != 0 and (word[i] == word[i - 1] or (word[i - 1], word[i]) in (
                    ('a', 'e'), ('e', 'i'), ('i', 'o'), ('o', 'u'))):
                dp[i] = dp[i - 1] + 1 # 符合条件继续计数
                if word[i] == 'u':
                    # 整个子字符串符合形式，并且遇见了u，就统计数量
                    ans = max(ans, dp[i])

        return ans

s = Solution()
print(s.longestBeautifulSubstring(input()))















